package com.zg.third.api.domain.vo;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.zg.common.core.vo.BaseVo;
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonProperty;

import java.io.Serializable;
import java.util.List;

/**
 * DESCRIPTION
 *
 * @author zhanfeng.liang
 * @since 2025-07-29
 */





/**
 * 企查查企业信息查询结果VO（仅包含Result及以下层级）
 */
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class QccKycVo extends BaseVo {

    @JsonProperty("VerifyResult")
    private Integer verifyResult; // 核验结果（1=通过）

    @JsonProperty("Data")
    private Info data; // 企业详细数据


    /**
     * 企业详细数据（Data字段）
     */
    @Data
    @JsonIgnoreProperties(ignoreUnknown = true)
    public static class Info implements Serializable {

        @JsonProperty("KeyNo")
        private String keyNo; // 企业唯一标识

        @JsonProperty("Name")
        private String name; // 企业名称

        @JsonProperty("CreditCode")
        private String creditCode; // 统一社会信用代码

        @JsonProperty("OperName")
        private String operName; // 经营者/法定代表人

        @JsonProperty("DesignatedRepresentativeList")
        private List<DesignatedRepresentative> designatedRepresentativeList; // 指定代表人列表

        @JsonProperty("Status")
        private String status; // 企业状态（如"存续"）

        @JsonProperty("StartDate")
        private String startDate; // 成立日期

        @JsonProperty("RegistCapi")
        private String registCapi; // 注册资本（带单位，如"185000万元"）

        @JsonProperty("RegisteredCapital")
        private String registeredCapital; // 注册资本（数值）

        @JsonProperty("RegisteredCapitalUnit")
        private String registeredCapitalUnit; // 注册资本单位（如"万"）

        @JsonProperty("RegisteredCapitalCCY")
        private String registeredCapitalCCY; // 注册资本币种（如"CNY"）

        @JsonProperty("RealCapi")
        private String realCapi; // 实缴资本（带单位）

        @JsonProperty("PaidUpCapital")
        private String paidUpCapital; // 实缴资本（数值）

        @JsonProperty("PaidUpCapitalUnit")
        private String paidUpCapitalUnit; // 实缴资本单位

        @JsonProperty("PaidUpCapitalCCY")
        private String paidUpCapitalCCY; // 实缴资本币种

        @JsonProperty("OrgNo")
        private String orgNo; // 组织机构代码

        @JsonProperty("No")
        private String no; // 注册号

        @JsonProperty("TaxNo")
        private String taxNo; // 纳税人识别号

        @JsonProperty("EconKind")
        private String econKind; // 经济类型

        @JsonProperty("TermStart")
        private String termStart; // 经营期限起

        @JsonProperty("TermEnd")
        private String termEnd; // 经营期限止

        @JsonProperty("TaxpayerType")
        private String taxpayerType; // 纳税人类型（如"一般纳税人"）

        @JsonProperty("PersonScope")
        private String personScope; // 人员规模

        @JsonProperty("InsuredCount")
        private String insuredCount; // 参保人数

        @JsonProperty("CheckDate")
        private String checkDate; // 核准日期

        @JsonProperty("AreaCode")
        private String areaCode; // 地区编码

        @JsonProperty("Area")
        private Area area; // 地区信息

        @JsonProperty("BelongOrg")
        private String belongOrg; // 所属机关

        @JsonProperty("ImExCode")
        private String imExCode; // 进出口企业代码

        @JsonProperty("Industry")
        private Industry industry; // 行业信息

        @JsonProperty("EnglishName")
        private String englishName; // 英文名

        @JsonProperty("Address")
        private String address; // 注册地址

        @JsonProperty("AddressPostalCode")
        private String addressPostalCode; // 注册地址邮编

        @JsonProperty("AnnualAddress")
        private String annualAddress; // 年报地址

        @JsonProperty("AnnualAddressPostalCode")
        private String annualAddressPostalCode; // 年报地址邮编

        @JsonProperty("Scope")
        private String scope; // 经营范围

        @JsonProperty("EntType")
        private String entType; // 企业类型编码

        @JsonProperty("OrgCodeList")
        private List<OrgCode> orgCodeList; // 机构代码列表

        @JsonProperty("ImageUrl")
        private String imageUrl; // 企业logo地址

        @JsonProperty("RevokeInfo")
        private RevokeInfo revokeInfo; // 注销/吊销信息

        @JsonProperty("OriginalName")
        private List<OriginalName> originalName; // 曾用名列表

        @JsonProperty("StockInfo")
        private StockInfo stockInfo; // 股票信息

        @JsonProperty("ContactInfo")
        private ContactInfo contactInfo; // 联系方式

        @JsonProperty("LongLat")
        private LongLat longLat; // 经纬度

        @JsonProperty("BankInfo")
        private BankInfo bankInfo; // 银行信息

        @JsonProperty("IsSmall")
        private String isSmall; // 是否小微企业（0=否）

        @JsonProperty("Scale")
        private String scale; // 企业规模（如"L"=大型）

        @JsonProperty("QccIndustry")
        private QccIndustry qccIndustry; // 企查查行业分类

        @JsonProperty("IsOfficialEnglish")
        private String isOfficialEnglish; // 是否有官方英文名（1=是）

        @JsonProperty("CompanyType")
        private String companyType; // 公司类型编码

        @JsonProperty("MainProductList")
        private List<String> mainProductList; // 主要产品列表

        @JsonProperty("PartnerList")
        private List<Partner> partnerList; // 股东列表

        @JsonProperty("PubPartnerList")
        private List<PubPartner> pubPartnerList; // 公开股东列表

        @JsonProperty("EmployeeList")
        private List<Employee> employeeList; // 主要人员列表

        @JsonProperty("PubEmployeeList")
        private List<PubEmployee> pubEmployeeList; // 公开人员列表

        @JsonProperty("BranchList")
        private List<Branch> branchList; // 分支机构列表

        @JsonProperty("ChangeList")
        private List<Change> changeList; // 变更记录列表

        @JsonProperty("TagList")
        private List<Tag> tagList; // 标签列表

        @JsonProperty("Parent")
        private Parent parent; // 母公司信息

        @JsonProperty("Beneficiary")
        private Beneficiary beneficiary; // 受益人信息

        @JsonProperty("ActualControllerList")
        private List<ActualController> actualControllerList; // 实际控制人列表

        @JsonProperty("EmergingIndustyList")
        private Object emergingIndustyList; // 新兴产业列表（null）

        @JsonProperty("GroupInfo")
        private GroupInfo groupInfo; // 集团信息

        @JsonProperty("InvestmentList")
        private List<Investment> investmentList; // 对外投资列表

        @JsonProperty("ProductList")
        private List<Product> productList; // 产品信息列表

        @JsonProperty("AdminLicenseList")
        private List<AdminLicense> adminLicenseList; // 行政许可列表

        @JsonProperty("ApproveSiteList")
        private List<ApproveSite> approveSiteList; // 网站备案列表

        @JsonProperty("SpotCheckList")
        private List<SpotCheck> spotCheckList; // 抽查记录列表

        @JsonProperty("TaxCreditList")
        private List<TaxCredit> taxCreditList; // 纳税信用列表


        // ---------------- 嵌套子对象定义 ----------------

        /** 指定代表人 */
        @Data
        @JsonIgnoreProperties(ignoreUnknown = true)
        public static class DesignatedRepresentative implements Serializable {
            @JsonProperty("PartnerName")
            private String partnerName; // 合伙人名称
            @JsonProperty("DelegatedName")
            private String delegatedName; // 委派代表人
        }

        /** 地区信息 */
        @Data
        @JsonIgnoreProperties(ignoreUnknown = true)
        public static class Area implements Serializable {
            @JsonProperty("Province")
            private String province; // 省份
            @JsonProperty("City")
            private String city; // 城市
            @JsonProperty("County")
            private String county; // 区县
        }

        /** 行业信息 */
        @Data
        @JsonIgnoreProperties(ignoreUnknown = true)
        public static class Industry implements Serializable {
            @JsonProperty("IndustryCode")
            private String industryCode; // 行业大类编码
            @JsonProperty("Industry")
            private String industry; // 行业大类名称
            @JsonProperty("SubIndustryCode")
            private String subIndustryCode; // 行业中类编码
            @JsonProperty("SubIndustry")
            private String subIndustry; // 行业中类名称
            @JsonProperty("MiddleCategoryCode")
            private String middleCategoryCode; // 行业小类编码
            @JsonProperty("MiddleCategory")
            private String middleCategory; // 行业小类名称
            @JsonProperty("SmallCategoryCode")
            private String smallCategoryCode; // 行业细类编码
            @JsonProperty("SmallCategory")
            private String smallCategory; // 行业细类名称
        }

        /** 机构代码 */
        @Data
        @JsonIgnoreProperties(ignoreUnknown = true)
        public static class OrgCode implements Serializable {
            @JsonProperty("PrimaryCode")
            private String primaryCode; // 主代码
            @JsonProperty("SecondaryCode")
            private String secondaryCode; // 次代码
        }

        /** 注销/吊销信息 */
        @Data
        @JsonIgnoreProperties(ignoreUnknown = true)
        public static class RevokeInfo implements Serializable {
            @JsonProperty("CancelDate")
            private String cancelDate; // 注销日期
            @JsonProperty("CancelReason")
            private String cancelReason; // 注销原因
            @JsonProperty("RevokeDate")
            private String revokeDate; // 吊销日期
            @JsonProperty("RevokeReason")
            private String revokeReason; // 吊销原因
        }

        /** 曾用名 */
        @Data
        @JsonIgnoreProperties(ignoreUnknown = true)
        public static class OriginalName implements Serializable {
            @JsonProperty("Name")
            private String name; // 曾用名
            @JsonProperty("ChangeDate")
            private String changeDate; // 变更日期
        }

        /** 股票信息 */
        @Data
        @JsonIgnoreProperties(ignoreUnknown = true)
        public static class StockInfo implements Serializable {
            @JsonProperty("StockNumber")
            private String stockNumber; // 股票代码
            @JsonProperty("StockType")
            private String stockType; // 股票类型（如"新三板"）
        }

        /** 联系方式 */
        @Data
        @JsonIgnoreProperties(ignoreUnknown = true)
        public static class ContactInfo implements Serializable {
            @JsonProperty("WebSiteList")
            private List<String> webSiteList; // 官网列表
            @JsonProperty("Email")
            private String email; // 邮箱
            @JsonProperty("MoreEmailList")
            private List<MoreEmail> moreEmailList; // 更多邮箱列表
            @JsonProperty("Tel")
            private String tel; // 电话
            @JsonProperty("MoreTelList")
            private List<MoreTel> moreTelList; // 更多电话列表

            @Data
            public static class MoreEmail implements Serializable {
                @JsonProperty("Email")
                private String email; // 邮箱
                @JsonProperty("Source")
                private String source; // 来源（如"2021年报"）
            }

            @Data
            public static class MoreTel implements Serializable {
                @JsonProperty("Tel")
                private String tel; // 电话
                @JsonProperty("Source")
                private String source; // 来源
            }
        }

        /** 经纬度 */
        @Data
        @JsonIgnoreProperties(ignoreUnknown = true)
        public static class LongLat implements Serializable {
            @JsonProperty("Longitude")
            private String longitude; // 经度
            @JsonProperty("Latitude")
            private String latitude; // 纬度
        }

        /** 银行信息 */
        @Data
        @JsonIgnoreProperties(ignoreUnknown = true)
        public static class BankInfo implements Serializable {
            @JsonProperty("Bank")
            private String bank; // 开户银行
            @JsonProperty("BankAccount")
            private String bankAccount; // 银行账号
            @JsonProperty("Name")
            private String name; // 账户名称
            @JsonProperty("CreditCode")
            private String creditCode; // 信用代码
            @JsonProperty("Address")
            private String address; // 地址
            @JsonProperty("Tel")
            private String tel; // 电话
        }

        /** 企查查行业分类 */
        @Data
        @JsonIgnoreProperties(ignoreUnknown = true)
        public static class QccIndustry implements Serializable {
            @JsonProperty("AName")
            private String aName; // 一级行业
            @JsonProperty("BName")
            private String bName; // 二级行业
            @JsonProperty("CName")
            private String cName; // 三级行业
            @JsonProperty("DName")
            private String dName; // 四级行业
        }

        /** 股东信息 */
        @Data
        @JsonIgnoreProperties(ignoreUnknown = true)
        public static class Partner implements Serializable {
            @JsonProperty("KeyNo")
            private String keyNo; // 股东唯一标识
            @JsonProperty("StockName")
            private String stockName; // 股东名称
            @JsonProperty("StockType")
            private String stockType; // 股东类型（如"自然人股东"）
            @JsonProperty("StockPercent")
            private String stockPercent; // 持股比例
            @JsonProperty("ShouldCapi")
            private String shouldCapi; // 认缴金额
            @JsonProperty("SubscribedCapital")
            private String subscribedCapital; // 认缴资本（数值）
            @JsonProperty("SubscribedCapitalUnit")
            private String subscribedCapitalUnit; // 认缴单位
            @JsonProperty("SubscribedCapitalCCY")
            private String subscribedCapitalCCY; // 认缴币种
            @JsonProperty("ShoudDate")
            private String shoudDate; // 认缴日期
            @JsonProperty("StakeDate")
            private String stakeDate; // 持股日期
            @JsonProperty("CreditCode")
            private String creditCode; // 信用代码
            @JsonProperty("Area")
            private String area; // 地区
        }

        /** 公开股东信息 */
        @Data
        @JsonIgnoreProperties(ignoreUnknown = true)
        public static class PubPartner implements Serializable {
            @JsonProperty("StockName")
            private String stockName; // 股东名称
            @JsonProperty("StockPercent")
            private String stockPercent; // 持股比例
            @JsonProperty("HoldType")
            private String holdType; // 持股类型
            @JsonProperty("Amount")
            private String amount; // 持股数量
            @JsonProperty("SubscribedCapital")
            private String subscribedCapital; // 认缴资本
            @JsonProperty("SubscribedCapitalUnit")
            private String subscribedCapitalUnit; // 认缴单位
            @JsonProperty("SubscribedCapitalCCY")
            private String subscribedCapitalCCY; // 认缴币种
            @JsonProperty("CreditCode")
            private String creditCode; // 信用代码
            @JsonProperty("Area")
            private String area; // 地区
        }

        /** 主要人员 */
        @Data
        @JsonIgnoreProperties(ignoreUnknown = true)
        public static class Employee implements Serializable {
            @JsonProperty("KeyNo")
            private String keyNo; // 人员唯一标识
            @JsonProperty("Name")
            private String name; // 姓名
            @JsonProperty("Job")
            private String job; // 职务
        }

        /** 公开人员 */
        @Data
        @JsonIgnoreProperties(ignoreUnknown = true)
        public static class PubEmployee implements Serializable {
            @JsonProperty("Name")
            private String name; // 姓名
            @JsonProperty("Job")
            private String job; // 职务
        }

        /** 分支机构 */
        @Data
        @JsonIgnoreProperties(ignoreUnknown = true)
        public static class Branch implements Serializable {
            @JsonProperty("KeyNo")
            private String keyNo; // 分支机构唯一标识
            @JsonProperty("Name")
            private String name; // 分支机构名称
            @JsonProperty("OperName")
            private String operName; // 负责人
            @JsonProperty("StartDate")
            private String startDate; // 成立日期
            @JsonProperty("Status")
            private String status; // 状态
            @JsonProperty("Area")
            private Area area; // 地区
        }

        /** 变更记录 */
        @Data
        @JsonIgnoreProperties(ignoreUnknown = true)
        public static class Change implements Serializable {
            @JsonProperty("ProjectName")
            private String projectName; // 变更项目（如"经营范围"）
            @JsonProperty("ChangeDate")
            private String changeDate; // 变更日期
            @JsonProperty("BeforeList")
            private List<String> beforeList; // 变更前
            @JsonProperty("AfterList")
            private List<String> afterList; // 变更后
        }

        /** 标签 */
        @Data
        @JsonIgnoreProperties(ignoreUnknown = true)
        public static class Tag implements Serializable {
            @JsonProperty("Type")
            private String type; // 标签类型
            @JsonProperty("Name")
            private String name; // 标签名称
        }

        /** 母公司信息 */
        @Data
        @JsonIgnoreProperties(ignoreUnknown = true)
        public static class Parent implements Serializable {
            @JsonProperty("KeyNo")
            private String keyNo; // 母公司唯一标识
            @JsonProperty("Name")
            private String name; // 母公司名称
            @JsonProperty("OperName")
            private String operName; // 负责人
            @JsonProperty("StartDate")
            private String startDate; // 成立日期
            @JsonProperty("Status")
            private String status; // 状态
            @JsonProperty("RegistCapi")
            private String registCapi; // 注册资本
        }

        /** 受益人信息 */
        @Data
        @JsonIgnoreProperties(ignoreUnknown = true)
        public static class Beneficiary implements Serializable {
            @JsonProperty("KeyNo")
            private String keyNo; // 受益人唯一标识
            @JsonProperty("Name")
            private String name; // 受益人姓名
            @JsonProperty("FinalBenefitPercent")
            private String finalBenefitPercent; // 最终受益比例
            @JsonProperty("Reason")
            private String reason; // 受益原因
        }

        /** 实际控制人 */
        @Data
        @JsonIgnoreProperties(ignoreUnknown = true)
        public static class ActualController implements Serializable {
            @JsonProperty("KeyNo")
            private String keyNo; // 控制人唯一标识
            @JsonProperty("Name")
            private String name; // 姓名
            @JsonProperty("FinalBenefitPercent")
            private String finalBenefitPercent; // 最终受益比例
            @JsonProperty("ControlPercent")
            private String controlPercent; // 控制比例
            @JsonProperty("IsActual")
            private String isActual; // 是否实际控制人（1=是）
        }

        /** 集团信息 */
        @Data
        @JsonIgnoreProperties(ignoreUnknown = true)
        public static class GroupInfo implements Serializable {
            @JsonProperty("GroupId")
            private String groupId; // 集团ID
            @JsonProperty("Name")
            private String name; // 集团名称
            @JsonProperty("Logo")
            private String logo; // 集团logo地址
        }

        /** 对外投资 */
        @Data
        @JsonIgnoreProperties(ignoreUnknown = true)
        public static class Investment implements Serializable {
            @JsonProperty("KeyNo")
            private String keyNo; // 被投企业唯一标识
            @JsonProperty("Name")
            private String name; // 被投企业名称
            @JsonProperty("StartDate")
            private String startDate; // 成立日期
            @JsonProperty("Status")
            private String status; // 状态
            @JsonProperty("FundedRatio")
            private String fundedRatio; // 出资比例
            @JsonProperty("ShouldCapi")
            private String shouldCapi; // 认缴金额
            @JsonProperty("SubscribedCapital")
            private String subscribedCapital; // 认缴资本（数值）
            @JsonProperty("SubscribedCapitalUnit")
            private String subscribedCapitalUnit; // 认缴单位
            @JsonProperty("SubscribedCapitalCCY")
            private String subscribedCapitalCCY; // 认缴币种
            @JsonProperty("Industry")
            private Industry industry; // 行业信息
            @JsonProperty("Area")
            private Area area; // 地区
        }

        /** 产品信息 */
        @Data
        @JsonIgnoreProperties(ignoreUnknown = true)
        public static class Product implements Serializable {
            @JsonProperty("Name")
            private String name; // 产品名称
            @JsonProperty("StartDate")
            private String startDate; // 发布日期
            @JsonProperty("RoundDesc")
            private String roundDesc; // 融资轮次
            @JsonProperty("Location")
            private String location; // 所在地
            @JsonProperty("Description")
            private String description; // 产品描述
        }

        /** 行政许可 */
        @Data
        @JsonIgnoreProperties(ignoreUnknown = true)
        public static class AdminLicense implements Serializable {
            @JsonProperty("LicensDocNo")
            private String licensDocNo; // 许可证号
            @JsonProperty("LicensDocName")
            private String licensDocName; // 许可证名称
            @JsonProperty("ValidityFrom")
            private String validityFrom; // 有效期起
            @JsonProperty("ValidityTo")
            private String validityTo; // 有效期止
            @JsonProperty("LicensOffice")
            private String licensOffice; // 发证机关
            @JsonProperty("LicensContent")
            private String licensContent; // 许可内容
            @JsonProperty("Source")
            private String source; // 来源
        }

        /** 网站备案 */
        @Data
        @JsonIgnoreProperties(ignoreUnknown = true)
        public static class ApproveSite implements Serializable {
            @JsonProperty("Name")
            private String name; // 网站名称
            @JsonProperty("WebAddress")
            private String webAddress; // 网站地址
            @JsonProperty("DomainName")
            private String domainName; // 域名
            @JsonProperty("LesenceNo")
            private String lesenceNo; // 备案号
            @JsonProperty("AuditDate")
            private String auditDate; // 审核日期
        }

        /** 抽查记录 */
        @Data
        @JsonIgnoreProperties(ignoreUnknown = true)
        public static class SpotCheck implements Serializable {
            @JsonProperty("ExecutiveOrg")
            private String executiveOrg; // 执行机关
            @JsonProperty("Type")
            private String type; // 检查类型
            @JsonProperty("Date")
            private String date; // 检查日期
            @JsonProperty("Consequence")
            private String consequence; // 检查结果
        }

        /** 纳税信用 */
        @Data
        @JsonIgnoreProperties(ignoreUnknown = true)
        public static class TaxCredit implements Serializable {
            @JsonProperty("TaxNo")
            private String taxNo; // 纳税人识别号
            @JsonProperty("Year")
            private String year; // 年度
            @JsonProperty("Level")
            private String level; // 信用等级（如"A"）
            @JsonProperty("Org")
            private String org; // 评定机构
        }
    }
}